home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / gnu / amiga / inlinrtn.lha / inline-retina.h
C/C++ Source or Header  |  1993-05-27  |  19KB  |  553 lines

  1. /* This is an inline header for programming the Retina Graphics card with */
  2. /*  GCC It is posted to 'alt.sources.amiga' as it is basically untested. */
  3. /*  You still need to include the "retina/retina.h" file in your source  */
  4. /*  before including this inline header. The Retina Board comes with     */
  5. /*  developer software in every package.  Thank you MacroSystem!         */
  6.  
  7. /*
  8.  * <inline/retina.h> $VER: 1.2 (26-5-93) ALPHA
  9.  * generated by EDB 5-26-93 from version 1.2 retina_lib.fd
  10.  * notes:  This was created by hacking retina_lib.fd and retina_protos.h
  11.  *         until they worked properly with the conv.p perl script
  12.  *         distributed in Markus Wild's GCC 2.3.3 port to Amiga OS
  13.  *         The fd file was used as the arbiter when conflicts arose.
  14.  *         General problems were upper case register names: use a0 not A0...
  15.  *         FD functions had less parameters than the PROTOS. Huh??????
  16.  *         This worked with the 'demo' program that was posted to
  17.  *         comp.sys.amiga.programmer, and that is as far as I've tested it.
  18.  *         Install in your gcc:os-include/inline directory, and use this
  19.  *         instead of the 'pragmas' and 'clib/protos' include files
  20.  */
  21.  
  22. #ifndef _RETINA_PROTOS_H
  23. #define _RETINA_PROTOS_H
  24.  
  25. #include <sys/cdefs.h>
  26. #include <inline/stubs.h>
  27.  
  28. __BEGIN_DECLS
  29. #ifndef BASE_EXT_DECL
  30. #define BASE_EXT_DECL extern struct Library * RetinaBase;
  31. #endif
  32. #ifndef BASE_PAR_DECL
  33. #define BASE_PAR_DECL
  34. #define BASE_PAR_DECL0 void
  35. #endif
  36. #ifndef BASE_NAME
  37. #define BASE_NAME RetinaBase
  38. #endif
  39.  
  40. static __inline UBYTE *
  41. Retina_AllocBitMap (BASE_PAR_DECL UWORD width,UWORD height,
  42.                     UWORD bytesPerPixel,ULONG flags)
  43. {
  44.   BASE_EXT_DECL
  45.   register UBYTE *  _res  __asm("d0");
  46.   register struct Library *a6 __asm("a6") = BASE_NAME;
  47.   register UWORD d0 __asm("d0") = width;
  48.   register UWORD d1 __asm("d1") = height;
  49.   register UWORD d2 __asm("d2") = bytesPerPixel;
  50.   register ULONG d3 __asm("d3") = flags;
  51.   __asm __volatile ("jsr a6@(-0xde)"
  52.   : "=r" (_res)
  53.   : "r" (a6), "r" (d0), "r" (d1), "r" (d2), "r" (d3)
  54.   : "a0","a1","d0","d1","d2","d3", "memory");
  55.   return _res;
  56. }
  57. static __inline ULONG
  58. Retina_AvailMem (BASE_PAR_DECL ULONG flags)
  59. {
  60.   BASE_EXT_DECL
  61.   register ULONG  _res  __asm("d0");
  62.   register struct Library *a6 __asm("a6") = BASE_NAME;
  63.   register ULONG d0 __asm("d0") = flags;
  64.   __asm __volatile ("jsr a6@(-0xea)"
  65.   : "=r" (_res)
  66.   : "r" (a6), "r" (d0)
  67.   : "a0","a1","d0","d1", "memory");
  68.   return _res;
  69. }
  70. static __inline void
  71. Retina_Circle (BASE_PAR_DECL struct RetinaScreen *screen,
  72.                UWORD x,UWORD y,UWORD r)
  73. {
  74.   BASE_EXT_DECL
  75.   register struct Library *a6 __asm("a6") = BASE_NAME;
  76.   register struct RetinaScreen *a0 __asm("a0") = screen;
  77.   register UWORD d0 __asm("d0") = x;
  78.   register UWORD d1 __asm("d1") = y;
  79.   register UWORD d2 __asm("d2") = r;
  80.   __asm __volatile ("jsr a6@(-0x108)"
  81.   : /* no output */
  82.   : "r" (a6), "r" (a0), "r" (d0), "r" (d1), "r" (d2)
  83.   : "a0","a1","d0","d1","d2", "memory");
  84. }
  85. static __inline void
  86. Retina_ClearScreen (BASE_PAR_DECL struct RetinaScreen *screen)
  87. {
  88.   BASE_EXT_DECL
  89.   register struct Library *a6 __asm("a6") = BASE_NAME;
  90.   register struct RetinaScreen *a0 __asm("a0") = screen;
  91.   __asm __volatile ("jsr a6@(-0xf0)"
  92.   : /* no output */
  93.   : "r" (a6), "r" (a0)
  94.   : "a0","a1","d0","d1", "memory");
  95. }
  96. static __inline void
  97. Retina_CloseScreen (BASE_PAR_DECL struct RetinaScreen *screen)
  98. {
  99.   BASE_EXT_DECL
  100.   register struct Library *a6 __asm("a6") = BASE_NAME;
  101.   register struct RetinaScreen *a0 __asm("a0") = screen;
  102.   __asm __volatile ("jsr a6@(-0xc0)"
  103.   : /* no output */
  104.   : "r" (a6), "r" (a0)
  105.   : "a0","a1","d0","d1", "memory");
  106. }
  107. static __inline void
  108. Retina_CopyRect (BASE_PAR_DECL struct RetinaScreen *srcScreen,UWORD srcX,
  109.                  UWORD srcY,struct RetinaScreen *destScreen,UWORD destX,
  110.                  UWORD destY,UWORD sizeX,UWORD sizeY)
  111. {
  112.   BASE_EXT_DECL
  113.   register struct Library *a6 __asm("a6") = BASE_NAME;
  114.   register struct RetinaScreen *a0 __asm("a0") = srcScreen;
  115.   register UWORD d0 __asm("d0") = srcX;
  116.   register UWORD d1 __asm("d1") = srcY;
  117.   register struct RetinaScreen *a1 __asm("a1") = destScreen;
  118.   register UWORD d2 __asm("d2") = destX;
  119.   register UWORD d3 __asm("d3") = destY;
  120.   register UWORD d4 __asm("d4") = sizeX;
  121.   register UWORD d5 __asm("d5") = sizeY;
  122.   __asm __volatile ("jsr a6@(-0x14a)"
  123.   : /* no output */
  124.   : "r" (a6), "r" (a0), "r" (d0), "r" (d1), "r" (a1), "r" (d2), "r" (d3), \
  125.     "r" (d4), "r" (d5)
  126.   : "a0","a1","d0","d1","d2","d3","d4","d5", "memory");
  127. }
  128. static __inline void
  129. Retina_DisownRetina (BASE_PAR_DECL0)
  130. {
  131.   BASE_EXT_DECL
  132.   register struct Library *a6 __asm("a6") = BASE_NAME;
  133.   __asm __volatile ("jsr a6@(-0x168)"
  134.   : /* no output */
  135.   : "r" (a6)
  136.   : "a0","a1","d0","d1", "memory");
  137. }
  138. static __inline struct RetinaMonitor *
  139. Retina_FindMonitor (BASE_PAR_DECL ULONG monitorID)
  140. {
  141.   BASE_EXT_DECL
  142.   register struct RetinaMonitor *  _res  __asm("d0");
  143.   register struct Library *a6 __asm("a6") = BASE_NAME;
  144.   register ULONG d0 __asm("d0") = monitorID;
  145.   __asm __volatile ("jsr a6@(-0xae)"
  146.   : "=r" (_res)
  147.   : "r" (a6), "r" (d0)
  148.   : "a0","a1","d0","d1", "memory");
  149.   return _res;
  150. }
  151. static __inline void
  152. Retina_FreeBitMap (BASE_PAR_DECL UBYTE *bitmap)
  153. {
  154.   BASE_EXT_DECL
  155.   register struct Library *a6 __asm("a6") = BASE_NAME;
  156.   register UBYTE *a0 __asm("a0") = bitmap;
  157.   __asm __volatile ("jsr a6@(-0xe4)"
  158.   : /* no output */
  159.   : "r" (a6), "r" (a0)
  160.   : "a0","a1","d0","d1", "memory");
  161. }
  162. static __inline ULONG
  163. Retina_GetAPen (BASE_PAR_DECL struct RetinaScreen *screen)
  164. {
  165.   BASE_EXT_DECL
  166.   register ULONG  _res  __asm("d0");
  167.   register struct Library *a6 __asm("a6") = BASE_NAME;
  168.   register struct RetinaScreen *a0 __asm("a0") = screen;
  169.   __asm __volatile ("jsr a6@(-0x132)"
  170.   : "=r" (_res)
  171.   : "r" (a6), "r" (a0)
  172.   : "a0","a1","d0","d1", "memory");
  173.   return _res;
  174. }
  175. static __inline ULONG
  176. Retina_GetDefaultScreenInfo (BASE_PAR_DECL ULONG defaultID,
  177.                              struct DefaultScreenInfo * buffer)
  178. {
  179.   BASE_EXT_DECL
  180.   register ULONG  _res  __asm("d0");
  181.   register struct Library *a6 __asm("a6") = BASE_NAME;
  182.   register ULONG d0 __asm("d0") = defaultID;
  183.   register struct DefaultScreenInfo * a0 __asm("a0") = buffer;
  184.   __asm __volatile ("jsr a6@(-0x5a)"
  185.   : "=r" (_res)
  186.   : "r" (a6), "r" (d0), "r" (a0)
  187.   : "a0","a1","d0","d1", "memory");
  188.   return _res;
  189. }
  190. static __inline void
  191. Retina_Line (BASE_PAR_DECL struct RetinaScreen *screen,
  192.              UWORD x1,UWORD y1,UWORD x2,UWORD y2)
  193. {
  194.   BASE_EXT_DECL
  195.   register struct Library *a6 __asm("a6") = BASE_NAME;
  196.   register struct RetinaScreen *a0 __asm("a0") = screen;
  197.   register UWORD d0 __asm("d0") = x1;
  198.   register UWORD d1 __asm("d1") = y1;
  199.   register UWORD d2 __asm("d2") = x2;
  200.   register UWORD d3 __asm("d3") = y2;
  201.   __asm __volatile ("jsr a6@(-0x10e)"
  202.   : /* no output */
  203.   : "r" (a6), "r" (a0), "r" (d0), "r" (d1), "r" (d2), "r" (d3)
  204.   : "a0","a1","d0","d1","d2","d3", "memory");
  205. }
  206. static __inline void
  207. Retina_LoadPalette (BASE_PAR_DECL struct RetinaScreen *screen,
  208.                     UWORD first,UWORD count,UBYTE *table)
  209. {
  210.   BASE_EXT_DECL
  211.   register struct Library *a6 __asm("a6") = BASE_NAME;
  212.   register struct RetinaScreen *a0 __asm("a0") = screen;
  213.   register UWORD d0 __asm("d0") = first;
  214.   register UWORD d1 __asm("d1") = count;
  215.   register UBYTE *a1 __asm("a1") = table;
  216.   __asm __volatile ("jsr a6@(-0x8a)"
  217.   : /* no output */
  218.   : "r" (a6), "r" (a0), "r" (d0), "r" (d1), "r" (a1)
  219.   : "a0","a1","d0","d1", "memory");
  220. }
  221. static __inline void
  222. Retina_MoveSprite (BASE_PAR_DECL struct RetinaScreen *screen,
  223.                    UWORD x,UWORD y)
  224. {
  225.   BASE_EXT_DECL
  226.   register struct Library *a6 __asm("a6") = BASE_NAME;
  227.   register struct RetinaScreen *a0 __asm("a0") = screen;
  228.   register UWORD d0 __asm("d0") = x;
  229.   register UWORD d1 __asm("d1") = y;
  230.   __asm __volatile ("jsr a6@(-0x126)"
  231.   : /* no output */
  232.   : "r" (a6), "r" (a0), "r" (d0), "r" (d1)
  233.   : "a0","a1","d0","d1", "memory");
  234. }
  235. static __inline struct RetinaMonitor *
  236. Retina_NextMonitor (BASE_PAR_DECL struct RetinaMonitor *monitor)
  237. {
  238.   BASE_EXT_DECL
  239.   register struct RetinaMonitor *  _res  __asm("d0");
  240.   register struct Library *a6 __asm("a6") = BASE_NAME;
  241.   register struct RetinaMonitor *a0 __asm("a0") = monitor;
  242.   __asm __volatile ("jsr a6@(-0xb4)"
  243.   : "=r" (_res)
  244.   : "r" (a6), "r" (a0)
  245.   : "a0","a1","d0","d1", "memory");
  246.   return _res;
  247. }
  248. static __inline struct RetinaScreen *
  249. Retina_OpenScreen (BASE_PAR_DECL UWORD width,UWORD height,
  250.                    ULONG monitorID,ULONG flags,APTR tags)
  251. {
  252.   BASE_EXT_DECL
  253.   register struct RetinaScreen *  _res  __asm("d0");
  254.   register struct Library *a6 __asm("a6") = BASE_NAME;
  255.   register UWORD d0 __asm("d0") = width;
  256.   register UWORD d1 __asm("d1") = height;
  257.   register ULONG d2 __asm("d2") = monitorID;
  258.   register ULONG d3 __asm("d3") = flags;
  259.   register APTR a0 __asm("a0") = tags;
  260.   __asm __volatile ("jsr a6@(-0xba)"
  261.   : "=r" (_res)
  262.   : "r" (a6), "r" (d0), "r" (d1), "r" (d2), "r" (d3), "r" (a0)
  263.   : "a0","a1","d0","d1","d2","d3", "memory");
  264.   return _res;
  265. }
  266. static __inline void
  267. Retina_OwnRetina (BASE_PAR_DECL0)
  268. {
  269.   BASE_EXT_DECL
  270.   register struct Library *a6 __asm("a6") = BASE_NAME;
  271.   __asm __volatile ("jsr a6@(-0x162)"
  272.   : /* no output */
  273.   : "r" (a6)
  274.   : "a0","a1","d0","d1", "memory");
  275. }
  276. static __inline ULONG
  277. Retina_ReadPixel (BASE_PAR_DECL struct RetinaScreen *screen,
  278.                   UWORD x,UWORD y)
  279. {
  280.   BASE_EXT_DECL
  281.   register ULONG  _res  __asm("d0");
  282.   register struct Library *a6 __asm("a6") = BASE_NAME;
  283.   register struct RetinaScreen *a0 __asm("a0") = screen;
  284.   register UWORD d0 __asm("d0") = x;
  285.   register UWORD d1 __asm("d1") = y;
  286.   __asm __volatile ("jsr a6@(-0x138)"
  287.   : "=r" (_res)
  288.   : "r" (a6), "r" (a0), "r" (d0), "r" (d1)
  289.   : "a0","a1","d0","d1", "memory");
  290.   return _res;
  291. }
  292. static __inline void
  293. Retina_ReadRect (BASE_PAR_DECL UBYTE *mem,UWORD memX,UWORD memY,
  294.                  UWORD memWidth,ULONG mode,struct RetinaScreen *screen,
  295.         UWORD screenX,UWORD screenY,UWORD sizeX,UWORD sizeY,UBYTE *mem2)
  296. {
  297.   BASE_EXT_DECL
  298.   register struct Library *a6 __asm("a6") = BASE_NAME;
  299.   register UBYTE *a0 __asm("a0") = mem;
  300.   register UWORD d0 __asm("d0") = memX;
  301.   register UWORD d1 __asm("d1") = memY;
  302.   register UWORD d2 __asm("d2") = memWidth;
  303.   register ULONG d3 __asm("d3") = mode;
  304.   register struct RetinaScreen *a1 __asm("a1") = screen;
  305.   register UWORD d4 __asm("d4") = screenX;
  306.   register UWORD d5 __asm("d5") = screenY;
  307.   register UWORD d6 __asm("d6") = sizeX;
  308.   register UWORD d7 __asm("d7") = sizeY;
  309.   register UBYTE *a2 __asm("a2") = mem2;
  310.   __asm __volatile ("jsr a6@(-0x144)"
  311.   : /* no output */
  312.   : "r" (a6), "r" (a0), "r" (d0), "r" (d1), "r" (d2), "r" (d3), "r" (a1), \
  313.     "r" (d4), "r" (d5), "r" (d6), "r" (d7), "r" (a2)
  314.   : "a0","a1","a2","d0","d1","d2","d3","d4","d5","d6","d7", "memory");
  315. }
  316. static __inline void
  317. Retina_RectFill (BASE_PAR_DECL struct RetinaScreen *screen,UWORD x1,UWORD y1,
  318.                  UWORD x2,UWORD y2)
  319. {
  320.   BASE_EXT_DECL
  321.   register struct Library *a6 __asm("a6") = BASE_NAME;
  322.   register struct RetinaScreen *a0 __asm("a0") = screen;
  323.   register UWORD d0 __asm("d0") = x1;
  324.   register UWORD d1 __asm("d1") = y1;
  325.   register UWORD d2 __asm("d2") = x2;
  326.   register UWORD d3 __asm("d3") = y2;
  327.   __asm __volatile ("jsr a6@(-0xf6)"
  328.   : /* no output */
  329.   : "r" (a6), "r" (a0), "r" (d0), "r" (d1), "r" (d2), "r" (d3)
  330.   : "a0","a1","d0","d1","d2","d3", "memory");
  331. }
  332. static __inline void
  333. Retina_ScreenToBack (BASE_PAR_DECL struct RetinaScreen *screen)
  334. {
  335.   BASE_EXT_DECL
  336.   register struct Library *a6 __asm("a6") = BASE_NAME;
  337.   register struct RetinaScreen *a0 __asm("a0") = screen;
  338.   __asm __volatile ("jsr a6@(-0x114)"
  339.   : /* no output */
  340.   : "r" (a6), "r" (a0)
  341.   : "a0","a1","d0","d1", "memory");
  342. }
  343. static __inline void
  344. Retina_ScreenToFront (BASE_PAR_DECL struct RetinaScreen *screen)
  345. {
  346.   BASE_EXT_DECL
  347.   register struct Library *a6 __asm("a6") = BASE_NAME;
  348.   register struct RetinaScreen *a0 __asm("a0") = screen;
  349.   __asm __volatile ("jsr a6@(-0xc6)"
  350.   : /* no output */
  351.   : "r" (a6), "r" (a0)
  352.   : "a0","a1","d0","d1", "memory");
  353. }
  354. static __inline void
  355. Retina_SetAPen (BASE_PAR_DECL struct RetinaScreen *screen,ULONG color)
  356. {
  357.   BASE_EXT_DECL
  358.   register struct Library *a6 __asm("a6") = BASE_NAME;
  359.   register struct RetinaScreen *a0 __asm("a0") = screen;
  360.   register ULONG d0 __asm("d0") = color;
  361.   __asm __volatile ("jsr a6@(-0xfc)"
  362.   : /* no output */
  363.   : "r" (a6), "r" (a0), "r" (d0)
  364.   : "a0","a1","d0","d1", "memory");
  365. }
  366. static __inline void
  367. Retina_SetDrMd (BASE_PAR_DECL struct RetinaScreen *screen,ULONG mode)
  368. {
  369.   BASE_EXT_DECL
  370.   register struct Library *a6 __asm("a6") = BASE_NAME;
  371.   register struct RetinaScreen *a0 __asm("a0") = screen;
  372.   register ULONG d0 __asm("d0") = mode;
  373.   __asm __volatile ("jsr a6@(-0x15c)"
  374.   : /* no output */
  375.   : "r" (a6), "r" (a0), "r" (d0)
  376.   : "a0","a1","d0","d1", "memory");
  377. }
  378. static __inline void
  379. Retina_SetPalette (BASE_PAR_DECL struct RetinaScreen *screen,UWORD index,
  380.                   UBYTE red,UBYTE green,UBYTE blue)
  381. {
  382.   BASE_EXT_DECL
  383.   register struct Library *a6 __asm("a6") = BASE_NAME;
  384.   register struct RetinaScreen *a0 __asm("a0") = screen;
  385.   register UWORD d0 __asm("d0") = index;
  386.   register UBYTE d1 __asm("d1") = red;
  387.   register UBYTE d2 __asm("d2") = green;
  388.   register UBYTE d3 __asm("d3") = blue;
  389.   __asm __volatile ("jsr a6@(-0x90)"
  390.   : /* no output */
  391.   : "r" (a6), "r" (a0), "r" (d0), "r" (d1), "r" (d2), "r" (d3)
  392.   : "a0","a1","d0","d1","d2","d3", "memory");
  393. }
  394. static __inline void
  395. Retina_SetPixel (BASE_PAR_DECL struct RetinaScreen *screen,UWORD x,
  396.                  UWORD y,ULONG color)
  397. {
  398.   BASE_EXT_DECL
  399.   register struct Library *a6 __asm("a6") = BASE_NAME;
  400.   register struct RetinaScreen *a0 __asm("a0") = screen;
  401.   register UWORD d0 __asm("d0") = x;
  402.   register UWORD d1 __asm("d1") = y;
  403.   register ULONG d2 __asm("d2") = color;
  404.   __asm __volatile ("jsr a6@(-0x156)"
  405.   : /* no output */
  406.   : "r" (a6), "r" (a0), "r" (d0), "r" (d1), "r" (d2)
  407.   : "a0","a1","d0","d1","d2", "memory");
  408. }
  409. static __inline UBYTE *
  410. Retina_SetSegmentPtr (BASE_PAR_DECL UBYTE *address)
  411. {
  412.   BASE_EXT_DECL
  413.   register UBYTE *  _res  __asm("d0");
  414.   register struct Library *a6 __asm("a6") = BASE_NAME;
  415.   register UBYTE *a0 __asm("a0") = address;
  416.   __asm __volatile ("jsr a6@(-0x96)"
  417.   : "=r" (_res)
  418.   : "r" (a6), "r" (a0)
  419.   : "a0","a1","d0","d1", "memory");
  420.   return _res;
  421. }
  422. static __inline ULONG
  423. Retina_SetSprite (BASE_PAR_DECL struct RetinaScreen *screen,ULONG *data,
  424.                   UWORD height,APTR tags)
  425. {
  426.   BASE_EXT_DECL
  427.   register ULONG  _res  __asm("d0");
  428.   register struct Library *a6 __asm("a6") = BASE_NAME;
  429.   register struct RetinaScreen *a0 __asm("a0") = screen;
  430.   register ULONG *a1 __asm("a1") = data;
  431.   register UWORD d0 __asm("d0") = height;
  432.   register APTR a2 __asm("a2") = tags;
  433.   __asm __volatile ("jsr a6@(-0x120)"
  434.   : "=r" (_res)
  435.   : "r" (a6), "r" (a0), "r" (a1), "r" (d0), "r" (a2)
  436.   : "a0","a1","a2","d0","d1", "memory");
  437.   return _res;
  438. }
  439. static __inline void
  440. Retina_SpriteFunction (BASE_PAR_DECL struct RetinaScreen *screen,APTR tags)
  441. {
  442.   BASE_EXT_DECL
  443.   register struct Library *a6 __asm("a6") = BASE_NAME;
  444.   register struct RetinaScreen *a0 __asm("a0") = screen;
  445.   register APTR a1 __asm("a1") = tags;
  446.   __asm __volatile ("jsr a6@(-0x12c)"
  447.   : /* no output */
  448.   : "r" (a6), "r" (a0), "r" (a1)
  449.   : "a0","a1","d0","d1", "memory");
  450. }
  451. static __inline void
  452. Retina_SwapBitMap (BASE_PAR_DECL struct RetinaScreen *screen)
  453. {
  454.   BASE_EXT_DECL
  455.   register struct Library *a6 __asm("a6") = BASE_NAME;
  456.   register struct RetinaScreen *a0 __asm("a0") = screen;
  457.   __asm __volatile ("jsr a6@(-0x11a)"
  458.   : /* no output */
  459.   : "r" (a6), "r" (a0)
  460.   : "a0","a1","d0","d1", "memory");
  461. }
  462. static __inline void
  463. Retina_SwapRect (BASE_PAR_DECL UBYTE *mem,UWORD memX,UWORD memY,
  464.                  UWORD memWidth,ULONG mode,struct RetinaScreen *screen,UWORD
  465.                  screenX,UWORD screenY,UWORD sizeX,UWORD sizeY,UBYTE *mem2)
  466. {
  467.   BASE_EXT_DECL
  468.   register struct Library *a6 __asm("a6") = BASE_NAME;
  469.   register UBYTE *a0 __asm("a0") = mem;
  470.   register UWORD d0 __asm("d0") = memX;
  471.   register UWORD d1 __asm("d1") = memY;
  472.   register UWORD d2 __asm("d2") = memWidth;
  473.   register ULONG d3 __asm("d3") = mode;
  474.   register struct RetinaScreen *a1 __asm("a1") = screen;
  475.   register UWORD d4 __asm("d4") = screenX;
  476.   register UWORD d5 __asm("d5") = screenY;
  477.   register UWORD d6 __asm("d6") = sizeX;
  478.   register UWORD d7 __asm("d7") = sizeY;
  479.   register UBYTE *a2 __asm("a2") = mem2;
  480.   __asm __volatile ("jsr a6@(-0x150)"
  481.   : /* no output */
  482.   : "r" (a6), "r" (a0), "r" (d0), "r" (d1), "r" (d2), "r" (d3), "r" (a1),\
  483.     "r" (d4), "r" (d5), "r" (d6), "r" (d7), "r" (a2)
  484.   : "a0","a1","a2","d0","d1","d2","d3","d4","d5","d6","d7", "memory");
  485. }
  486. static __inline BOOL
  487. Retina_WriteBitMap (BASE_PAR_DECL struct RetinaScreen *screen,
  488.                     struct BitMap *bitmap,UBYTE *palette,UWORD destX,
  489.                     UWORD destY,UWORD width,ULONG mode)
  490. {
  491.   BASE_EXT_DECL
  492.   register BOOL  _res  __asm("d0");
  493.   register struct Library *a6 __asm("a6") = BASE_NAME;
  494.   register struct RetinaScreen *a0 __asm("a0") = screen;
  495.   register struct BitMap *a1 __asm("a1") = bitmap;
  496.   register UBYTE *a2 __asm("a2") = palette;
  497.   register UWORD d0 __asm("d0") = destX;
  498.   register UWORD d1 __asm("d1") = destY;
  499.   register UWORD d2 __asm("d2") = width;
  500.   register ULONG d3 __asm("d3") = mode;
  501.   __asm __volatile ("jsr a6@(-0x36)"
  502.   : "=r" (_res)
  503.   : "r" (a6), "r" (a0), "r" (a1), "r" (a2), "r" (d0), "r" (d1),\
  504.     "r" (d2), "r" (d3)
  505.   : "a0","a1","a2","d0","d1","d2","d3", "memory");
  506.   return _res;
  507. }
  508. static __inline void
  509. Retina_WritePixel (BASE_PAR_DECL struct RetinaScreen *screen,UWORD x,UWORD y)
  510. {
  511.   BASE_EXT_DECL
  512.   register struct Library *a6 __asm("a6") = BASE_NAME;
  513.   register struct RetinaScreen *a0 __asm("a0") = screen;
  514.   register UWORD d0 __asm("d0") = x;
  515.   register UWORD d1 __asm("d1") = y;
  516.   __asm __volatile ("jsr a6@(-0x102)"
  517.   : /* no output */
  518.   : "r" (a6), "r" (a0), "r" (d0), "r" (d1)
  519.   : "a0","a1","d0","d1", "memory");
  520. }
  521. static __inline void
  522. Retina_WriteRect (BASE_PAR_DECL UBYTE *mem,UWORD memX,UWORD memY,
  523.                   UWORD memWidth,ULONG mode,struct RetinaScreen *screen,
  524.         UWORD screenX,UWORD screenY,UWORD sizeX,UWORD sizeY,UBYTE *mem2)
  525. {
  526.   BASE_EXT_DECL
  527.   register struct Library *a6 __asm("a6") = BASE_NAME;
  528.   register UBYTE *a0 __asm("a0") = mem;
  529.   register UWORD d0 __asm("d0") = memX;
  530.   register UWORD d1 __asm("d1") = memY;
  531.   register UWORD d2 __asm("d2") = memWidth;
  532.   register ULONG d3 __asm("d3") = mode;
  533.   register struct RetinaScreen *a1 __asm("a1") = screen;
  534.   register UWORD d4 __asm("d4") = screenX;
  535.   register UWORD d5 __asm("d5") = screenY;
  536.   register UWORD d6 __asm("d6") = sizeX;
  537.   register UWORD d7 __asm("d7") = sizeY;
  538.   register UBYTE *a2 __asm("a2") = mem2;
  539.   __asm __volatile ("jsr a6@(-0x13e)"
  540.   : /* no output */
  541.   : "r" (a6), "r" (a0), "r" (d0), "r" (d1), "r" (d2), "r" (d3), "r" (a1),\
  542.     "r" (d4), "r" (d5), "r" (d6), "r" (d7), "r" (a2)
  543.   : "a0","a1","a2","d0","d1","d2","d3","d4","d5","d6","d7", "memory");
  544. }
  545. #undef BASE_EXT_DECL
  546. #undef BASE_PAR_DECL
  547. #undef BASE_PAR_DECL0
  548. #undef BASE_NAME
  549.  
  550. __END_DECLS
  551.  
  552. #endif /* _RETINA_PROTOS_H */
  553.